/-boot
/-docs
/-docs/CodeMirrorServices
/-docs/types
/-docs/types/api
/-docs/types/default
/-docs/types/defaultDoc
TextDocState.ts
TextDocType.ts
registered.ts
/-editor
/-files
/-files-old
/-imports
/-layout
/-shell
/-storage ...
/-storage/attached ...
/-storage/attached/api
DetectStorage.ts
LoadStorage.ts
LoadStorageRecipient.ts
PropertiesByFullPath.ts
StorageAccess.ts
StorageDetect.ts
UpdateStorage.ts
/-storage/attached/dom ...
DetectStorage.ts
LoadStorage.ts
StorageAccess.ts
StorageDetect.ts
UpdateStorage.ts
/-storage/attached/indexedDB
/-storage/attached/localStorage
/-storage/attached/webSQL
/-tests
/-tests/files
/-tests/storage
/-tests/storage/attached
AttachedStorageTests.ts
AttachedStorageTestsNew.ts
DomStorageTests.ts
IndexedDBStorageTests.ts
LocalStorageStorageTests.ts
WebSQLStorageTests.ts
TestCase.html
TestCase.ts
TestPage.css
TestPage.html
TestPage.ts
_sampleTests.ts
teapo-tests.html
teapo-tests.ts
/-typings
Dom.ts
TypeScriptService.ts
functions.ts
ko.ts
nteapo.html
persistence.api.ts
persistence.ts
shell.ts
teapo.html
teapo.ts
try.html
try.js
xxxxxxxxxx
84
      private _document: { createElement(tag: string): HTMLElement; } = document) {
 
1
module teapo.storage.attached.dom {
2
​
3
  export class StorageDetect {
4
    
5
    constructor(
6
      private _parent: HTMLElement,
7
      private _document: { createElement(tag: string): HTMLElement; } = document) {
8
    }
9
​
10
    detectStorageAsync(
11
      uniqueKey: string,
12
      callback: (
13
      error: Error,
14
      metadata: storage.attached.StorageDetect.BootState,
15
      access: StorageAccess) => void): void {
16
​
17
      var editedUTC: number = 0;
18
​
19
      var editedUTCValue = this._parent.getAttribute('data-edited-utc');
20
      if (editedUTCValue) {
21
        try { editedUTC = parseInt(editedUTCValue); }
22
        catch (parseEditedUTCError) { }
23
      }
24
​
25
      var dodgyElements: HTMLElement[] = [];
26
      var elementMap: { [fullPath: string]: HTMLElement; } = {};
27
      var files: string[] = [];
28
      for (var i = 0; i < this._parent.children.length; i++) {
29
        var element = <HTMLElement>this._parent.children.item(i);
30
        var fullPath = this._getFullPath(element);
31
        if (!fullPath || elementMap.hasOwnProperty(fullPath)) {
32
          dodgyElements.push(element);
33
        }
34
        else {
35
          elementMap[fullPath] = element;
36
          files.push(fullPath);
37
        }
38
      }
39
​
40
      for (var i = 0; i < dodgyElements.length; i++) {
41
        this._parent.removeChild(dodgyElements[i]);
42
      }
43
​
44
      var access = new StorageAccess(this._parent, elementMap, this._document);
45
​
46
      callback(null, {
47
        editedUTC: editedUTC,
48
        files: files
49
      }, access);
50
    }
51
​
52
    private _getFullPath(element: HTMLElement): string {
53
​
54
      if (!element.getAttribute) {
55
        return null;
56
      }
57
​
58
      var fullPath = element.getAttribute('data-teapo-path');
59
      return fullPath;
60
    }
61
​
62
  }
63
  
64
}
40:51